package biblioGraphiqueV2;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashMap;
import java.util.Observable;
import java.util.Vector;

import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.JSeparator;
import javax.swing.JScrollPane;
import javax.swing.JComboBox;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;

//import biblioGraphiqueV2.src.VueSaisieParution;

public class VueSaisieParution extends Vue {
	private JTextField textFieldIdentifiantParution;
	private JTextField textFieldTitreArticle;
	private JTextField textFieldTitreParution;

	private JComboBox comboBox;
	
	private JButton btnRechercher;
	private JButton btnAnnuler;
	private JButton btnCreer;
	private JButton btnAnnuler2;
	private JButton btnTerminer;
	private JButton btnAjouter;
	private JTextField textFieldNomNouvAuteur;
	private JTextField textFieldPrenomNouvAuteur;
	private DefaultListModel model;
	private Auteur auteur;
	
	private String cleAuteur;
	private JScrollPane scrollPane;
	private JList list;


	public VueSaisieParution(Controleur controleur, HashMap<String, Auteur> auteurs) {
		super(controleur);
		setTitle("Saisir une nouvelle parution d'un périodique");
		setBounds(100, 100, 380, 480);
		getContentPane().setLayout(null);
		this.addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);
			}
		});
		
		
		
		
		JLabel lblIssn = new JLabel("ISSN");
		lblIssn.setBounds(137, 12, 33, 15);
		getContentPane().add(lblIssn);
		
		btnRechercher = new JButton("Rechercher");
		btnRechercher.setBounds(67, 91, 107, 25);
		getContentPane().add(btnRechercher);
		btnRechercher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().rechPeriodique((String)list.getSelectedValue());
				}
		});
		
		
		btnAnnuler = new JButton("Annuler");
		btnAnnuler.setBounds(216, 91, 107, 25);
		getContentPane().add(btnAnnuler);
		btnAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);} 
		});
		
		JLabel lblIdentifiantParution = new JLabel("Identifiant Parution");
		lblIdentifiantParution.setBounds(70, 142, 121, 15);
		getContentPane().add(lblIdentifiantParution);
		
		textFieldIdentifiantParution = new JTextField();
		textFieldIdentifiantParution.setBounds(209, 140, 114, 19);
		getContentPane().add(textFieldIdentifiantParution);
		textFieldIdentifiantParution.setColumns(10);
		
		btnCreer = new JButton("Créer");
		btnCreer.setBounds(67, 202, 107, 25);
		getContentPane().add(btnCreer);
		btnCreer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().nouvParution((String)list.getSelectedValue(), textFieldIdentifiantParution.getText(), textFieldTitreParution.getText());
				}
		});
		
		btnAnnuler2 = new JButton("Annuler");
		btnAnnuler2.setBounds(216, 202, 107, 25);
		getContentPane().add(btnAnnuler2);
		btnAnnuler2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);}
		});
		
		JLabel lblAuteur = new JLabel("Auteur déjà existant");
		lblAuteur.setBounds(60, 273, 128, 15);
		getContentPane().add(lblAuteur);
		
		JLabel lblTitreArticle = new JLabel("Titre de l'article");
		lblTitreArticle.setBounds(91, 368, 97, 15);
		getContentPane().add(lblTitreArticle);
		
		textFieldTitreArticle = new JTextField();
		textFieldTitreArticle.setBounds(206, 366, 114, 19);
		getContentPane().add(textFieldTitreArticle);
		textFieldTitreArticle.setColumns(10);
		
		btnAjouter = new JButton("Ajouter");
		btnAjouter.setBounds(67, 395, 107, 25);
		getContentPane().add(btnAjouter);
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Auteur aut;
				if(textFieldNomNouvAuteur.getText().length() == 0 && textFieldPrenomNouvAuteur.getText().length()==0){
					cleAuteur = comboBox.getSelectedItem().toString();
					aut = getControleur().getAuteur(cleAuteur);
					setAuteur(aut);
				}
				else{
//					Auteur auteurTmp = new Auteur(textFieldNomNouvAuteur.getText(), textFieldPrenomNouvAuteur.getText());
//					setAuteur(auteurTmp);
//					//ajoutAuteur(getAuteur());
//					cleAuteur = getAuteur().getNom()+" "+getAuteur().getPrenom();
//					getControleur().getAuteurs().put(cleAuteur, getAuteur());
					aut = new Auteur(textFieldNomNouvAuteur.getText(), textFieldPrenomNouvAuteur.getText());
					setAuteur(aut);
				}
//				cleAuteur = getAuteur().getNom()+" "+getAuteur().getPrenom();
			getControleur().ajoutArticle(aut, textFieldTitreArticle.getText(), (String)list.getSelectedValue(), textFieldIdentifiantParution.getText());
			textFieldNomNouvAuteur.setText(""); textFieldPrenomNouvAuteur.setText("");textFieldTitreArticle.setText("");}
		});
		
		btnTerminer = new JButton("Terminer");
		btnTerminer.setBounds(216, 395, 107, 25);
		getContentPane().add(btnTerminer);
		btnTerminer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);}
		});
		
		JSeparator separator = new JSeparator();
		separator.setBounds(52, 128, 271, 2);
		getContentPane().add(separator);
		
		JSeparator separator2 = new JSeparator();
		separator2.setBounds(52, 250, 271, 2);
		getContentPane().add(separator2);
		
		JLabel lblTitreParution = new JLabel("Titre de la parution");
		lblTitreParution.setBounds(67, 175, 128, 15);
		getContentPane().add(lblTitreParution);
		
		textFieldTitreParution = new JTextField();
		textFieldTitreParution.setBounds(209, 171, 114, 19);
		getContentPane().add(textFieldTitreParution);
		textFieldTitreParution.setColumns(10);
		
		comboBox = new JComboBox(auteurs.keySet().toArray());
		comboBox.setBounds(206, 268, 114, 24);
		getContentPane().add(comboBox);
		
		JLabel lblNomNouvelAuteur = new JLabel("Nom du nouvel auteur");
		lblNomNouvelAuteur.setBounds(49, 306, 139, 15);
		getContentPane().add(lblNomNouvelAuteur);
		
		textFieldNomNouvAuteur = new JTextField();
		textFieldNomNouvAuteur.setBounds(206, 304, 114, 19);
		getContentPane().add(textFieldNomNouvAuteur);
		textFieldNomNouvAuteur.setColumns(10);
		
		JLabel lblPrenomDuNouvel = new JLabel("Prénom du nouvel auteur");
		lblPrenomDuNouvel.setBounds(31, 337, 157, 15);
		getContentPane().add(lblPrenomDuNouvel);
		
		textFieldPrenomNouvAuteur = new JTextField();
		textFieldPrenomNouvAuteur.setBounds(206, 335, 114, 19);
		getContentPane().add(textFieldPrenomNouvAuteur);
		textFieldPrenomNouvAuteur.setColumns(10);
		
		scrollPane = new JScrollPane(list);
		scrollPane.setBounds(188, 12, 139, 65);
		getContentPane().add(scrollPane);
		
	
		
		
		model = new DefaultListModel();
		alimenteIssn(controleur);
		list = new JList(model);
		list.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, new Color(0, 0, 0), null, null, null));
		list.setSelectionMode(0);
		scrollPane.setViewportView(list);
		
	}
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			list.setEnabled(true);
			btnRechercher.setEnabled(true);
			btnAnnuler.setEnabled(true);
			textFieldIdentifiantParution.setEnabled(false);
			textFieldTitreParution.setEnabled(false);
			btnCreer.setEnabled(false);
			btnAnnuler2.setEnabled(false);
			btnTerminer.setEnabled(false);
			btnAjouter.setEnabled(false);
			textFieldNomNouvAuteur.setEnabled(false);
			textFieldPrenomNouvAuteur.setEnabled(false);
			textFieldTitreArticle.setEnabled(false);
			comboBox.setEnabled(false);
			break;
			}
		case inter1: {
			list.setEnabled(false);
			btnRechercher.setEnabled(false);
			btnAnnuler.setEnabled(false);
			textFieldIdentifiantParution.setEnabled(true);
			textFieldTitreParution.setEnabled(true);
			btnCreer.setEnabled(true);
			btnAnnuler2.setEnabled(true);
			textFieldNomNouvAuteur.setEnabled(false);
			textFieldPrenomNouvAuteur.setEnabled(false);
			btnTerminer.setEnabled(false);
			btnAjouter.setEnabled(false);
			textFieldTitreArticle.setEnabled(false);
			comboBox.setEnabled(false);
			break;
			}
		case finale: {
			list.setEnabled(false);
			btnRechercher.setEnabled(false);
			btnAnnuler.setEnabled(false);
			textFieldIdentifiantParution.setEnabled(false);
			textFieldTitreParution.setEnabled(false);
			btnCreer.setEnabled(false);
			btnAnnuler2.setEnabled(false);
			btnTerminer.setEnabled(true);
			btnAjouter.setEnabled(true);
			textFieldTitreArticle.setEnabled(true);
			textFieldNomNouvAuteur.setEnabled(true);
			textFieldPrenomNouvAuteur.setEnabled(true);
			comboBox.setEnabled(true);
			break;
			}
		}
	}
	
	public Auteur getAuteur(){
		return auteur;
	}
	
	public void setAuteur(Auteur auteur){
		this.auteur = auteur;
	}
	
	public void ajoutAuteur(Auteur auteur){
		if(textFieldNomNouvAuteur.getText().length() != 0 && textFieldPrenomNouvAuteur.getText().length()!=0){
			comboBox.addItem(auteur);
			Auteur auteurTmp = new Auteur(textFieldNomNouvAuteur.getText(), textFieldPrenomNouvAuteur.getText());
			setAuteur(auteurTmp);
			cleAuteur = getAuteur().getNom()+" "+getAuteur().getPrenom();
			getControleur().getAuteurs().put(cleAuteur, getAuteur());
		}
		
	}
	
	public void update(Observable observable, Object objet) {
		// maj de la vue lorque l'ouvrage a été modifié
		this.ajoutAuteur(this.getAuteur());
		super.update(observable,  objet);
	} // Fin upDate	
	
	public JComboBox getComboBox(){
		return comboBox;
	}
	
	public void alimenteIssn(Controleur cont){
		HashMap<String, Periodique> per;
		per = getControleur().getPeriodiques();
		
		Vector<String> vec = new Vector<String>(); 

		for (String mapKey : per.keySet()) {
			String num = per.get(mapKey).getIssn();
			vec.add(num);
		}
		
		for(int i = vec.size()-1 ; i >= 0 ; i--)
		{
			model.addElement(vec.elementAt(i));
		}
	}
	
}